package com.closer.server.biz.user.service;

import com.closer.server.biz.user.dto.*;
import com.closer.server.biz.user.dto.vo.UserVO;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.closer.server.biz.user.entity.User;


/**
 * 用户 服务层。
 *
 * @author closer
 */
public interface UserService extends IService<User> {

    /**
     * 注册
     *
     * @param params 注册参数
     * @return 创建的ID
     */
    long register(RegisterRequest params);

    /**
     * 登录
     *
     * @param params 登录参数
     * @return 登录信息
     */
    UserVO login(LoginRequest params);

    /**
     * 登出
     *
     * @return 登出结果
     */
    boolean logout();

    /**
     * 获取用户信息
     *
     * @return 用户信息
     */
    UserVO getLoginInfo(Long userId);

    /**
     * 密码加密
     *
     * @param userPassword 密码
     * @return 加密后的密码
     */
    String getEncryptPassword(String account,String userPassword);

    /**
     * 更新登录用户的信息
     *
     * @param params 更新参数
     * @return 更新结果
     */
    boolean updateLoginInfo(UpdateRequest params);

    /**
     * 搜索用户
     *
     * @param params 搜索参数
     * @return 搜索结果
     */
    Page<UserVO> search(SearchRequest params);

    /**
     * 删除用户
     *
     * @param id 用户ID
     * @return 删除结果
     */
    boolean delete(Long id);

    /**
     * [管理员]更新用户信息
     *
     * @param params 更新参数
     * @return 更新结果
     */
    boolean updateByAdmin(UpdateByAdminRequest params);

    /**
     * [管理员]添加用户
     *
     * @param params 添加参数
     * @return 添加结果
     */
    long add(AddRequest params);
}
